<?php
/**
 * Logger
 * 
 * @author Alexey Strelnikoff <zog@zoggi.net>
 */

namespace Zoggi\Logger;

/**
 * Класс для логирования любых сообщений
 * 
 * Пример использования:
 * <code>
 * use Logger\Log;
 * 
 * Log::setFile('default.log');
 * Log::write('some message for default log');
 * 
 * Log::setFile('server','server.log');
 * Log::write('server','some message for server log');
 * </code>
 */
class Log {

	/**
	 * Контейнер для хранения имён файлов
	 * @var array 
	 */
	private static $logFiles;

	private function __construct() {
		
	}

	/**
	 * Записывает сообщение в файл
	 * 
	 * @param string $type Индентификтор лога
	 * @param mixed $message Сообщение для записи в лог
	 */
	public static function write() {

		list( $type, $message ) = self::getArguments(func_get_args());

		if ( empty(self::$logFiles[$type]) ) {
			return false;
			//trigger_error("Can't find ".$type." log".$type,E_USER_ERROR);
		}

		$fileName = self::$logFiles[$type];

		if ( !is_scalar($message) ) {
			$message = print_r($message, true);
		}
		if ( $f = fopen($fileName, 'a') ) {
			fwrite($f, "---[ " . strftime("%Y-%m-%d %H:%M:%S") . "]---\n" . $message . "\n");
			fclose($f);
		}
	}

	/**
	 * Устанавливает файл, для записи лога
	 * 
	 * @param string $type Индентификтор лога
	 * @param string $filename Имя файла
	 * @return void
	 */
	public static function setFile() {
		list( $type, $filename ) = self::getArguments(func_get_args());
		self::$logFiles[$type] = $filename;
	}

	/**
	 * Возвращает параметры для методов логирования
	 * 
	 * @param array $args Массив параметров
	 * @return array
	 */
	private static function getArguments( $args ) {
		switch ( sizeof($args) ) {
			case 2:
				$type = $args[0];
				$data = $args[1];
				break;
			case 1:
				$type = 'default';
				$data = $args[0];
				break;
			default:
				trigger_error("Incorrect params for Log::method([\$type,]\$fileName)", E_USER_ERROR);
		}
		return array($type, $data);
	}

}